const data = require('./data.json')
/**
 *  {
      '0.and.c_log_module': {
        op: 'eq',
        value: 8,
        name: '名称',
        desc: 'xxx',
        types: []
      }
    }
 */
var result = {}
let ops = ['eq', 'neq', 'gt', 'lt', 'gte', 'lte', 'ranges', 'in']
data.forEach((item, index) => {
  // 获取到第一层key
  let tmp = '' + index //  => 0
  // 遍历第二层
  for(let key in item) {
    tmp += '$' + key // => 0.and
    // 遍历第三层：即从此层开始才会出现我们想要的数据
    for (let key1 in item[key]) {
      // 只有是对象类型的才能进行后续操作：即排除event_id和event_name
      if (typeof item[key][key1] === 'object') {
        recusion(item[key][key1], tmp + '$' + key1)
      }
    }
  }
  console.log(result)
})

// 递归查询是否用于'_'属性
function recusion (target, key) {
  // 代表有_属性则，该层是想要的数据，可以直接拿到我们的数据了
  if (Object.keys(target).includes('_')) {
    result[key] = { op: '', value: '', name: '', desc: '', types: [] }
    // 遍历拿值
    for (let key1 in target) {
      switch (key1) {
        case 'eq':
        case 'neq':
        case 'gt':
        case 'lt':
        case 'gte':
        case 'lte':
        case 'ranges':
        case 'in':
          result[key].op = key1
          result[key].value = target[key1]
          break
        case '_':
          const arr = target[key1].split(',')
          result[key].name = arr[0]
          result[key].desc = arr[1]
          result[key].types = arr.slice(2)
          break
      }
    }
  } else {
    // 否则还需要递归遍历：注意需要记住我们的key
    for(let key1 in target) {
      recusion(target[key1], key + '$' + key1)
    }
  }
}